<html>
<!--
  == This software is subject to the terms of the Eclipse Public License v1.0
  == Agreement, available at the following URL:
  == http://www.eclipse.org/legal/epl-v10.html.
  == You must accept the terms of that agreement to use this software.
  ==
  == Copyright (C) 2001-2005 Julian Hyde and others
  == Copyright (C) 2005-2012 Pentaho
  == All Rights Reserved.
  -->

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

<style>

a:link {
  color: #990000;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

a:visited {
  color: #990000;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

a.nav:link {
  color: #990000;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

a.nav:visited {
  color: #990000;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

a.body:link {
  color: #990000;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

a.body:visited {
  color: #990000;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

a.purple:link {
/*  color: #990099; */
  color: #C8A8FF;
  text-decoration: none;
  font-size: x-small;
  font-style: normal;
  font-weight: normal;
  font-family: verdana, arial, helvetica, sans-serif;
}

a.purple:visited {
/*  color: #990099; */
  color: #C8A8FF;
  text-decoration: none;
  font-size: x-small;
  font-style: normal;
  font-weight: normal;
  font-family: verdana, arial, helvetica, sans-serif;
}

a.td:link {
  color: #990000;
  text-decoration: none;
  font-size: 10px;
  line-height: 12px;
  font-family: verdana, arial, helvetica, sans-serif;
}

a.td:visited {
  color: #990000;
  text-decoration: none;
  font-size: 10px;
  line-height: 12px;
  font-family: verdana, arial, helvetica, sans-serif;
}

a.subnav:link {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  font-weight: bold;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

a.subnav:visited {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  font-weight: bold;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

dl {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

dt {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

dd {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

td.content {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

td.collcontent {
  color: #000000;
  text-decoration: none;
  font-size: 10px;
  line-height: 12px;
  font-family: verdana, arial, helvetica, sans-serif;
}

span.subtitle1 {
  color: #990000;
  text-decoration: none;
  font-size: 16px;
  font-weight: bold;
  line-height: 18px;
  font-family: verdana, arial, helvetica, sans-serif;
}

span.subtitle2 {
  color: #333333;
  text-decoration: none;
  font-size: 16px;
  font-weight: bold;
  line-height: 18px;
  font-family: verdana, arial, helvetica, sans-serif;
}

span.subtitle3 {
  color: #990000;
  text-decoration: none;
  font-size: 12px;
  font-weight: bold;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

span.subtitle4 {
  color: #333333;
  text-decoration: none;
  font-size: 10px;
  font-weight: bold;
  line-height: 12px;
  font-family: verdana, arial, helvetica, sans-serif;
}

span.subtitle5 {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  font-weight: bold;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

span.colldate {
  color: #333333;
  text-decoration: none;
  font-size: 10px;
  font-style: oblique;
  line-height: 12px;
  font-family: verdana, arial, helvetica, sans-serif;
}

span.highlight {
  background-color: #eeeeee;
}

textarea {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

p {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

p.award {
  color: #333333;
  text-decoration: none;
  font-size: 10px;
  line-height: 12px;
  font-family: verdana, arial, helvetica, sans-serif;
}

p.coll {
  color: #333333;
  text-decoration: none;
  font-size: 10px;
  line-height: 12px;
  font-family: verdana, arial, helvetica, sans-serif;
}

h1 {
  color: #990000;
  text-decoration: bold;
  font-size: 24px;
  line-height: 18px;
  font-family: verdana, arial, helvetica, sans-serif;
}

h2 {
  color: #990000;
  text-decoration: none;
  font-size: 18px;
  line-height: 18px;
  font-family: verdana, arial, helvetica, sans-serif;
}

h3 {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, arial, helvetica, sans-serif;
}

h4 {
  color: #333333;
  text-decoration: none;
  font-size: 10px;
  line-height: 10px;
  font-family: verdana, arial, helvetica, sans-serif;
}

h5 {
  color: #990000;
  text-decoration: none;
  font-size: 10px;
  line-height: 10px;
  font-family: verdana, arial, helvetica, sans-serif;
}

ul {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, helvetica, arial, sans-serif;
}

ul.coll {
  color: #333333;
  text-decoration: none;
  font-size: 10px;
  line-height: 12px;
  font-family: verdana, helvetica, arial, sans-serif;
}

li {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, helvetica, arial, sans-serif;
}

ol {
  color: #333333;
  text-decoration: none;
  font-size: 12px;
  line-height: 14px;
  font-family: verdana, helvetica, arial, sans-serif;
}

ol.coll {
  color: #333333;
  text-decoration: none;
  font-size: 10px;
  line-height: 12px;
  font-family: verdana, helvetica, arial, sans-serif;
}

.footer {
  color: #990000;
  text-decoration: none;
  font-size: 10px;
  line-height: 10px;
  font-family: verdana, arial, helvetica, sans-serif;
}

PRE {
  background:#EEEEEE;
  margin-top:1em;   margin-bottom:1em; margin-left:0px;
  padding:5pt;
}

PRE.clsCode, CODE.clsText { font-family:'courier new',courier,serif; font-size:130%; }

PRE.clsSyntax { font-family:verdana,arial,helvetica,sans-serif; font-size:120%; }

</style>


</head>

<body>
Mondrian is an OLAP server implemented in Java.

<h2>Introduction</h2>
<p>See <a href="../architecture.html">architecture</a>.</p>
<h2>Components</h2>
<h3>Query transformer</h3>
<p>See {@link mondrian.parser.MdxParserValidator}.</p>
<h3>Metadata</h3>
<p>It is represented as an XML file. The metadata is loaded into memory the
first time you reference a dimensional model. You can modify the model at
runtime by creating instances of classes such as <code>{@link
mondrian.rolap.RolapHierarchy}</code>.</p>
<h3>Calculation layer</h3>
<p><i>todo</i>: See {@link mondrian.olap.Query} and {@link mondrian.olap.Result}.</p>
<p><i>todo</i>: The <code>package {@link mondrian.rolap}</code>. is the one and
only implementation of the API. The DriverManager (<code>class {@link
mondrian.olap.DriverManager}</code>) acts as class-factory.</p>
<p><i>todo</i>: How members are calculated...</p>
<p><i>todo</i>: How aggregations are batched...</p>
<p><i>todo</i>: MDX functions. See <a href="#User_defined_functions">user-defined functions</a>.</p>
<h3>Aggregation manager</h3>
<p>Aggregations are based upon the relational model: as far as the aggregation
manager is concerned, there is no relationship between the columns <code>city</code>
and <code>state</code>. This means that all roll-ups are the same: you just drop
a column. Consider the 3 roll-ups possible by dropping a column from the
aggregation {<code>gender</code>, <code>city</code>, <code>state</code>}:
dropping <code>gender</code> is equivalent to removing the <code>[Gender]</code>
dimension; dropping <code>city</code> is equivalent to rolling up to a higher
level in the <code>[Geography]</code> hierarchy; and dropping <code>state</code>
is not even allowed in the dimensional model (no, sorry, you can't ask about
products sold in a cities called 'Portland'). This approach will also allow us
to implement 'drill anywhere'.</p>
<p>An aggregation is defined by a search condition, for example, <code>{state in
('CA', 'OR', 'WA'), city = <i>any</i>, gender = 'M', measure = 'Unit sales'}</code>.
The <i><code>any</code></i> value is important; if we had asked for a specific
set of cities, we would not later be able to roll-up by dropping the <code>city</code>
column.</p>
<p>The caching strategy is to throw out the aggregation with the lowest
cost/benefit ratio. The 'benefit' of an item is the effort it took to produce
(effort which it is saving future queries) multiplied by its 'usefulness' which
declines exponentially if it is not used over time. The 'cost' of an item is its
size.</p>

<hr>

<table border="0" class="clsStd" width="100%" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
  <tr>
    <td>
      $Id$
      (<a href="http://perforce.eigenbase.org:8080/open/mondrian/src/main/overview.html?ac=22">log</a>)
    </td>
  </tr>
</table>

</body>
</html>
